home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / despereaux-swings.swf / scripts / Box2D / Dynamics / Joints / b2MouseJoint.as < prev    next >
Encoding:
Text File  |  2011-10-17  |  6.7 KB  |  195 lines

  1. package Box2D.Dynamics.Joints
  2. {
  3.    import Box2D.Common.Math.b2Mat22;
  4.    import Box2D.Common.Math.b2Vec2;
  5.    import Box2D.Common.b2Settings;
  6.    import Box2D.Dynamics.b2Body;
  7.    import Box2D.Dynamics.b2TimeStep;
  8.    
  9.    public class b2MouseJoint extends b2Joint
  10.    {
  11.        
  12.       
  13.       public var m_beta:Number;
  14.       
  15.       public var m_mass:b2Mat22;
  16.       
  17.       public var m_target:b2Vec2;
  18.       
  19.       public var m_impulse:b2Vec2;
  20.       
  21.       public var m_localAnchor:b2Vec2;
  22.       
  23.       private var K1:b2Mat22;
  24.       
  25.       private var K2:b2Mat22;
  26.       
  27.       private var K:b2Mat22;
  28.       
  29.       public var m_gamma:Number;
  30.       
  31.       public var m_C:b2Vec2;
  32.       
  33.       public var m_maxForce:Number;
  34.       
  35.       public function b2MouseJoint(param1:b2MouseJointDef)
  36.       {
  37.          var _loc2_:Number = NaN;
  38.          var _loc3_:Number = NaN;
  39.          var _loc4_:b2Mat22 = null;
  40.          var _loc5_:Number = NaN;
  41.          var _loc6_:Number = NaN;
  42.          var _loc7_:Number = NaN;
  43.          var _loc8_:Number = NaN;
  44.          K = new b2Mat22();
  45.          K1 = new b2Mat22();
  46.          K2 = new b2Mat22();
  47.          m_localAnchor = new b2Vec2();
  48.          m_target = new b2Vec2();
  49.          m_impulse = new b2Vec2();
  50.          m_mass = new b2Mat22();
  51.          m_C = new b2Vec2();
  52.          super(param1);
  53.          m_target.SetV(param1.target);
  54.          _loc2_ = m_target.x - m_body2.m_xf.position.x;
  55.          _loc3_ = m_target.y - m_body2.m_xf.position.y;
  56.          _loc4_ = m_body2.m_xf.R;
  57.          m_localAnchor.x = _loc2_ * _loc4_.col1.x + _loc3_ * _loc4_.col1.y;
  58.          m_localAnchor.y = _loc2_ * _loc4_.col2.x + _loc3_ * _loc4_.col2.y;
  59.          m_maxForce = param1.maxForce;
  60.          m_impulse.SetZero();
  61.          _loc5_ = m_body2.m_mass;
  62.          _loc6_ = 2 * b2Settings.b2_pi * param1.frequencyHz;
  63.          _loc7_ = 2 * _loc5_ * param1.dampingRatio * _loc6_;
  64.          _loc8_ = param1.timeStep * _loc5_ * (_loc6_ * _loc6_);
  65.          m_gamma = 1 / (_loc7_ + _loc8_);
  66.          m_beta = _loc8_ / (_loc7_ + _loc8_);
  67.       }
  68.       
  69.       override public function GetAnchor1() : b2Vec2
  70.       {
  71.          return m_target;
  72.       }
  73.       
  74.       override public function GetAnchor2() : b2Vec2
  75.       {
  76.          return m_body2.GetWorldPoint(m_localAnchor);
  77.       }
  78.       
  79.       override public function GetReactionForce() : b2Vec2
  80.       {
  81.          return m_impulse;
  82.       }
  83.       
  84.       override public function SolvePositionConstraints() : Boolean
  85.       {
  86.          return true;
  87.       }
  88.       
  89.       override public function InitVelocityConstraints(param1:b2TimeStep) : void
  90.       {
  91.          var _loc2_:b2Body = null;
  92.          var _loc3_:b2Mat22 = null;
  93.          var _loc4_:Number = NaN;
  94.          var _loc5_:Number = NaN;
  95.          var _loc6_:Number = NaN;
  96.          var _loc7_:Number = NaN;
  97.          var _loc8_:Number = NaN;
  98.          var _loc9_:Number = NaN;
  99.          var _loc10_:Number = NaN;
  100.          _loc2_ = m_body2;
  101.          _loc3_ = _loc2_.m_xf.R;
  102.          _loc4_ = m_localAnchor.x - _loc2_.m_sweep.localCenter.x;
  103.          _loc5_ = m_localAnchor.y - _loc2_.m_sweep.localCenter.y;
  104.          _loc6_ = _loc3_.col1.x * _loc4_ + _loc3_.col2.x * _loc5_;
  105.          _loc5_ = _loc3_.col1.y * _loc4_ + _loc3_.col2.y * _loc5_;
  106.          _loc4_ = _loc6_;
  107.          _loc7_ = _loc2_.m_invMass;
  108.          _loc8_ = _loc2_.m_invI;
  109.          K1.col1.x = _loc7_;
  110.          K1.col2.x = 0;
  111.          K1.col1.y = 0;
  112.          K1.col2.y = _loc7_;
  113.          K2.col1.x = _loc8_ * _loc5_ * _loc5_;
  114.          K2.col2.x = -_loc8_ * _loc4_ * _loc5_;
  115.          K2.col1.y = -_loc8_ * _loc4_ * _loc5_;
  116.          K2.col2.y = _loc8_ * _loc4_ * _loc4_;
  117.          K.SetM(K1);
  118.          K.AddM(K2);
  119.          K.col1.x += m_gamma;
  120.          K.col2.y += m_gamma;
  121.          K.Invert(m_mass);
  122.          m_C.x = _loc2_.m_sweep.c.x + _loc4_ - m_target.x;
  123.          m_C.y = _loc2_.m_sweep.c.y + _loc5_ - m_target.y;
  124.          _loc2_.m_angularVelocity *= 0.98;
  125.          _loc9_ = param1.dt * m_impulse.x;
  126.          _loc10_ = param1.dt * m_impulse.y;
  127.          _loc2_.m_linearVelocity.x += _loc7_ * _loc9_;
  128.          _loc2_.m_linearVelocity.y += _loc7_ * _loc10_;
  129.          _loc2_.m_angularVelocity += _loc8_ * (_loc4_ * _loc10_ - _loc5_ * _loc9_);
  130.       }
  131.       
  132.       override public function GetReactionTorque() : Number
  133.       {
  134.          return 0;
  135.       }
  136.       
  137.       public function SetTarget(param1:b2Vec2) : void
  138.       {
  139.          if(m_body2.IsSleeping())
  140.          {
  141.             m_body2.WakeUp();
  142.          }
  143.          m_target = param1;
  144.       }
  145.       
  146.       override public function SolveVelocityConstraints(param1:b2TimeStep) : void
  147.       {
  148.          var _loc2_:b2Body = null;
  149.          var _loc3_:b2Mat22 = null;
  150.          var _loc4_:Number = NaN;
  151.          var _loc5_:Number = NaN;
  152.          var _loc6_:Number = NaN;
  153.          var _loc7_:Number = NaN;
  154.          var _loc8_:Number = NaN;
  155.          var _loc9_:Number = NaN;
  156.          var _loc10_:Number = NaN;
  157.          var _loc11_:Number = NaN;
  158.          var _loc12_:Number = NaN;
  159.          var _loc13_:Number = NaN;
  160.          var _loc14_:Number = NaN;
  161.          var _loc15_:Number = NaN;
  162.          var _loc16_:Number = NaN;
  163.          _loc2_ = m_body2;
  164.          _loc3_ = _loc2_.m_xf.R;
  165.          _loc6_ = m_localAnchor.x - _loc2_.m_sweep.localCenter.x;
  166.          _loc7_ = m_localAnchor.y - _loc2_.m_sweep.localCenter.y;
  167.          _loc4_ = _loc3_.col1.x * _loc6_ + _loc3_.col2.x * _loc7_;
  168.          _loc7_ = _loc3_.col1.y * _loc6_ + _loc3_.col2.y * _loc7_;
  169.          _loc6_ = _loc4_;
  170.          _loc8_ = _loc2_.m_linearVelocity.x + -_loc2_.m_angularVelocity * _loc7_;
  171.          _loc9_ = _loc2_.m_linearVelocity.y + _loc2_.m_angularVelocity * _loc6_;
  172.          _loc3_ = m_mass;
  173.          _loc4_ = _loc8_ + m_beta * param1.inv_dt * m_C.x + m_gamma * param1.dt * m_impulse.x;
  174.          _loc5_ = _loc9_ + m_beta * param1.inv_dt * m_C.y + m_gamma * param1.dt * m_impulse.y;
  175.          _loc10_ = -param1.inv_dt * (_loc3_.col1.x * _loc4_ + _loc3_.col2.x * _loc5_);
  176.          _loc11_ = -param1.inv_dt * (_loc3_.col1.y * _loc4_ + _loc3_.col2.y * _loc5_);
  177.          _loc12_ = m_impulse.x;
  178.          _loc13_ = m_impulse.y;
  179.          m_impulse.x += _loc10_;
  180.          m_impulse.y += _loc11_;
  181.          if((_loc14_ = m_impulse.Length()) > m_maxForce)
  182.          {
  183.             m_impulse.Multiply(m_maxForce / _loc14_);
  184.          }
  185.          _loc10_ = m_impulse.x - _loc12_;
  186.          _loc11_ = m_impulse.y - _loc13_;
  187.          _loc15_ = param1.dt * _loc10_;
  188.          _loc16_ = param1.dt * _loc11_;
  189.          _loc2_.m_linearVelocity.x += _loc2_.m_invMass * _loc15_;
  190.          _loc2_.m_linearVelocity.y += _loc2_.m_invMass * _loc16_;
  191.          _loc2_.m_angularVelocity += _loc2_.m_invI * (_loc6_ * _loc16_ - _loc7_ * _loc15_);
  192.       }
  193.    }
  194. }
  195.